import echarts from "echarts"

/**
 * 监视器类
 */
class Monitor{
    /**
     * 初始化类
     * @param run_step 步长
     */
    constructor(){
        // 最优值列表
        this.gbest_value_list = [];
        // 迭代次数列表
        this.iteration_list = [];
        // 监控器实例
        this.monitor = echarts.init(document.getElementById('monitor'));
        // 监控器配置项
        this.option = {
            title: {
                text: '防御效果'
            },
            legend: {
                //data: ['粒子群算法'],
                //top: '90%'
            },
            color: ['#2f4554', '#ca8622', '#c23531', '#bda29a', '#6e7074', '#546570', '#c4ccd3'],
            xAxis: {
                data: this.iteration_list,
                type: 'category',
                name: '迭代次数',
            },
            yAxis: {
                min: -1,
                // max: function (value) {
                //     return Math.ceil(value.max / 0.5) * 0.5
                //
                // },
                max: 0,
                name: "暴露率"
            },
            series: [{
                name: '适应度值收敛曲线',
                type: 'line',
                data: this.gbest_value_list,
            }
            ]
        };
        // 使用刚指定的配置项和数据显示图表。
        this.monitor.setOption(this.option);
    }

    /**
     * 监控器数据更新
     * @param gbest_value
     * @param run_step
     */
    update_data(gbest_value, run_step){
        this.gbest_value_list.push(gbest_value);
        // 迭代次数是一个累加值,因此要区分第一次,还是后面的累加
        let iter_length = this.iteration_list.length;
        if(iter_length === 0){
            this.iteration_list.push(run_step);
        }else{
            let last_iteration = this.iteration_list[iter_length - 1]
            this.iteration_list.push(last_iteration + run_step);
        }
    }

    /**
     * 将监控器的信息进行显示
     */
    show(){
        this.monitor.setOption({
            xAxis: {
                data: this.iteration_list,
                type: 'category',
            },
            series: [{
                // 根据名字对应到相应的系列
                name: '适应度值收敛曲线',
                data: this.gbest_value_list
            }]
        });
    }
}




export default Monitor;


